#!/bin/sh
# this script can check your answer package before commiting to huawei in future_net programming match.
# Author : Leiyuhou@huawei.com 
# 2016/3/26

if [ $# -lt 1 ] ; then
cat <<-HELP_msg
test your future_net archive simply before committing to huawei.
  USAGE : ./smoke <archive_file>
  Example : ./smoke coding/future_net.tar.gz

HELP_msg
exit 2
fi

RED="\033[31m "
GREEN="\033[32m "
NORM="\033[0m"

if ! uname -v|egrep -q "14.04.+-Ubuntu" ;then
	echo "${RED}INFO : Your OS is not Ubuntu 14.04 .${NORM}"
fi

if ! uname -i | fgrep -q "x86_64" ; then
	echo "${RED}INFO : Your OS is not a x86_64bit linux.${NORM}"
fi

if ! gcc --version 2>&1 | egrep -q "gcc.+4.8.4" ;then
	echo "${RED}INFO : your gcc version is not 4.8.4.${NORM}"
fi

if ! java -version 2>&1 | egrep -q "1.7.0_95" ;then
	echo "${RED}INFO : your jkd is not 1.7.0_95 .${NORM}"
fi

cd "$( dirname "$0"  )"
if [ ! -f $1 ] ; then
	echo "${RED}Error${NORM} :$1 not exist.Please give a valid archieve file as the first argument. "
	exit 3
fi

[ -d dest09 ] ||  mkdir dest09 > /dev/null 2>&1
rm -fr dest09/* >/dev/null 2>&1

case $1 in
	*.tar.gz)
	tar -C ./dest09 -xzf $1 
	;;

	*.zip)
	unzip $1 -d ./dest09
	;;

	*)
	echo "${RED}Error${NORM} :$1 should be a .tar.gz file or a .zip file ."
	exit 4
	;;	
esac

if [ ! -d ./dest09/code ] ; then
	echo "${RED}Error${NORM}: No source code found in your archieve :$1 "
	echo "   you should place source code files in a subdirectory named code"
	exit 4
fi

if [ -x ./dest09/future_net ] ;then
	if ! file ./dest09/future_net | fgrep -q "ELF 64-bit LSB" ; then
		echo "${RED}Info${NORM}: your future_net is not a 64-bit binary file."
		echo "    You had better rebuild it to 64bit ."
	fi
 
	cmdstr="timeout -k 9 20 ./dest09/future_net "

elif [ -f ./dest09/future_net.jar ]; then
	cmdstr="timeout -k 9 20 java -cp ./futurenetRunner.jar:./dest09/future_net.jar com.huawei.futurenet.runner.Runner  "
else
	echo "${RED}Error${NORM}: no executeable future_net or future_net.jar in your archieve."
	echo "   or this file is not in the top directory or your archieve."
	exit 4
fi

# create testcase directory and testcase files.
[ -d ./testcase ] || mkdir ./testcase
cat >./testcase/topo1.csv <<TOPO1_CSV
0,0,288,8
1,0,294,2
2,1,0,3
3,1,5,6
4,2,1,6
5,2,3,5
6,3,289,2
7,3,209,10
8,4,2,5
9,4,6,3
10,4,7,7
11,5,50,10
12,5,95,7
13,5,273,3
14,5,15,7
15,5,150,4
16,6,22,7
17,6,158,2
18,7,241,2
19,7,157,10
20,7,222,2
21,7,204,1
22,7,48,10
23,8,5,2
24,8,10,7
25,8,15,5
26,9,8,9
27,9,12,3
28,9,14,5
29,10,289,5
30,10,140,10
31,10,164,7
32,10,52,2
33,10,47,7
34,11,10,4
35,11,16,10
36,12,290,2
37,12,298,9
38,12,109,3
39,12,94,5
40,12,93,1
41,13,11,6
42,13,47,4
43,14,17,2
44,14,257,9
45,14,240,8
46,14,53,4
47,14,104,3
48,15,288,1
49,15,179,9
50,16,22,6
51,17,62,6
52,17,290,10
53,17,257,5
54,17,216,6
55,17,276,4
56,18,17,7
57,18,35,3
58,19,12,9
59,19,20,3
60,20,26,7
61,20,39,7
62,21,14,8
63,21,211,1
64,21,199,2
65,21,99,1
66,21,77,4
67,22,62,1
68,23,15,10
69,23,37,7
70,24,17,4
71,24,28,1
72,24,49,5
73,25,21,1
74,25,27,10
75,26,164,3
76,26,134,6
77,27,54,1
78,27,91,3
79,28,29,6
80,28,108,8
81,29,115,9
82,29,297,6
83,29,222,6
84,29,273,7
85,29,155,10
86,30,16,2
87,30,44,4
88,31,18,2
89,32,22,7
90,32,262,2
91,33,31,6
92,33,271,1
93,34,18,1
94,34,63,8
95,35,48,7
96,35,68,7
97,36,34,1
98,36,61,1
99,36,70,1
100,37,292,5
101,37,89,2
102,38,29,4
103,38,175,9
104,38,167,10
105,38,127,1
106,38,287,10
107,39,208,8
108,39,273,10
109,40,36,5
110,40,276,7
111,40,0,8
112,40,73,3
113,40,202,1
114,41,35,10
115,41,72,3
116,42,28,10
117,42,96,6
118,42,157,8
119,42,58,7
120,42,115,5
121,43,41,7
122,43,150,1
123,43,246,10
124,43,194,7
125,43,22,6
126,44,189,7
127,44,151,3
128,45,40,1
129,45,50,4
130,46,43,5
131,46,294,4
132,46,299,2
133,46,290,10
134,46,77,7
135,47,45,4
136,47,58,7
137,48,188,4
138,48,32,2
139,49,58,10
140,49,71,8
141,50,174,10
142,50,32,6
143,51,35,7
144,51,71,4
145,52,44,3
146,52,227,1
147,53,29,1
148,53,39,2
149,53,170,9
150,53,94,8
151,53,142,9
152,54,274,7
153,54,166,7
154,55,43,2
155,55,62,2
156,55,67,9
157,56,37,3
158,57,48,7
159,57,79,8
160,58,274,6
161,58,259,10
162,59,50,10
163,60,56,1
164,60,69,9
165,60,84,7
166,61,66,4
167,61,94,4
168,62,278,9
169,63,235,4
170,63,104,4
171,63,283,5
172,63,296,8
173,63,70,7
174,64,59,10
175,64,104,9
176,65,40,5
177,65,76,6
178,66,72,9
179,66,76,4
180,67,83,6
181,67,207,4
182,68,91,9
183,68,199,6
184,69,97,9
185,69,99,7
186,70,74,5
187,70,202,5
188,71,294,8
189,72,234,3
190,73,55,8
191,73,138,5
192,74,78,3
193,74,89,2
194,74,146,2
195,75,47,3
196,75,186,5
197,75,267,2
198,75,93,7
199,75,250,5
200,76,120,5
201,76,230,4
202,77,64,9
203,78,93,4
204,79,98,6
205,79,67,8
206,79,227,8
207,79,169,4
208,79,120,7
209,80,61,8
210,80,148,8
211,81,68,4
212,81,93,9
213,82,62,7
214,82,202,1
215,83,224,7
216,83,246,7
217,84,85,3
218,84,115,10
219,84,164,2
220,85,123,1
221,85,150,9
222,86,74,3
223,86,170,7
224,87,68,2
225,87,50,2
226,88,47,2
227,88,125,2
228,88,129,6
229,88,163,6
230,89,115,7
231,90,84,10
232,91,143,3
233,92,46,5
234,92,290,9
235,93,272,4
236,94,281,9
237,94,58,4
238,95,58,7
239,95,290,4
240,95,230,6
241,95,228,6
242,95,183,5
243,96,74,7
244,96,240,10
245,97,120,7
246,97,68,1
247,97,270,3
248,97,284,4
249,97,293,1
250,98,149,2
251,98,165,4
252,99,162,8
253,99,249,4
254,99,258,4
255,99,78,6
256,99,0,5
257,100,54,3
258,100,271,10
259,101,95,6
260,101,194,6
261,102,84,8
262,102,114,6
263,103,73,4
264,103,152,4
265,104,220,9
266,104,179,3
267,105,92,4
268,105,112,6
269,106,103,2
270,106,135,5
271,106,210,9
272,107,90,3
273,107,173,6
274,108,73,3
275,108,22,10
276,109,79,1
277,109,293,4
278,109,239,6
279,109,204,1
280,109,270,8
281,110,108,9
282,110,134,4
283,110,138,6
284,110,151,6
285,111,70,1
286,111,233,7
287,111,87,7
288,111,224,1
289,111,134,7
290,112,202,8
291,113,74,1
292,113,193,2
293,114,171,8
294,114,271,7
295,115,235,2
296,115,230,6
297,116,108,7
298,116,204,1
299,117,104,4
300,117,119,5
301,118,106,6
302,118,112,1
303,118,280,3
304,118,203,7
305,118,190,8
306,119,269,9
307,120,235,8
308,120,265,1
309,121,81,5
310,121,290,10
311,122,81,1
312,122,130,1
313,122,137,4
314,123,127,3
315,123,239,8
316,124,110,6
317,124,131,1
318,124,178,5
319,124,190,2
320,124,215,2
321,125,241,4
322,125,121,5
323,125,119,4
324,125,52,9
325,125,298,3
326,126,103,10
327,126,157,6
328,127,254,7
329,127,15,3
330,128,99,1
331,128,184,10
332,129,293,7
333,129,157,1
334,130,136,5
335,130,174,3
336,131,156,7
337,131,258,3
338,132,95,2
339,133,109,8
340,133,219,6
341,134,194,4
342,135,266,9
343,136,252,8
344,136,67,6
345,136,71,5
346,136,189,7
347,136,157,7
348,137,155,1
349,137,285,5
350,138,189,1
351,139,132,2
352,139,258,8
353,139,234,10
354,139,224,9
355,139,59,4
356,140,70,9
357,140,157,6
358,141,113,3
359,141,158,1
360,141,225,5
361,142,103,9
362,142,0,3
363,142,241,6
364,142,13,3
365,142,183,6
366,143,144,7
367,143,237,5
368,143,242,3
369,144,169,1
370,144,166,4
371,144,281,1
372,144,112,1
373,144,298,3
374,145,99,10
375,145,255,10
376,146,147,10
377,146,166,10
378,147,243,1
379,147,32,1
380,147,248,1
381,147,232,1
382,147,178,2
383,148,270,3
384,148,139,1
385,148,70,8
386,148,219,1
387,148,287,4
388,149,171,1
389,149,207,5
390,149,220,4
391,150,191,10
392,150,77,4
393,150,169,9
394,150,108,8
395,150,296,1
396,151,219,10
397,151,203,6
398,152,188,3
399,152,185,8
400,152,134,3
401,152,13,8
402,152,75,10
403,153,101,7
404,153,287,7
405,153,83,2
406,153,3,6
407,153,139,10
408,154,112,1
409,154,233,4
410,155,208,4
411,156,234,5
412,156,263,4
413,157,235,10
414,157,178,4
415,158,188,8
416,159,100,7
417,159,162,8
418,160,102,2
419,160,238,2
420,160,151,7
421,160,272,10
422,160,242,9
423,161,86,10
424,161,186,1
425,161,59,8
426,161,92,9
427,161,287,3
428,162,220,2
429,162,202,1
430,163,177,1
431,163,240,2
432,164,265,4
433,164,178,7
434,165,280,10
435,165,78,9
436,165,285,10
437,165,264,3
438,165,281,9
439,166,204,8
440,166,27,10
441,167,99,8
442,167,174,6
443,168,118,5
444,168,157,9
445,169,232,3
446,169,52,1
447,170,277,10
448,171,284,3
449,171,83,10
450,172,104,10
451,172,224,3
452,173,274,8
453,173,71,1
454,173,6,6
455,173,48,4
456,173,76,10
457,174,263,6
458,175,160,5
459,175,290,10
460,176,88,6
461,176,187,3
462,177,217,7
463,177,276,2
464,177,104,4
465,177,96,6
466,177,87,1
467,178,226,6
468,178,27,7
469,179,111,2
470,180,158,7
471,180,270,2
472,181,90,6
473,181,199,2
474,181,260,3
475,182,164,3
476,182,178,5
477,182,203,7
478,182,249,5
479,182,129,8
480,183,103,3
481,183,155,10
482,184,277,10
483,184,72,7
484,184,157,10
485,184,151,5
486,184,222,9
487,185,94,1
488,185,62,5
489,185,92,6
490,185,120,8
491,185,3,3
492,186,109,6
493,186,90,8
494,187,195,5
495,187,278,5
496,188,235,3
497,189,236,9
498,189,151,2
499,190,277,9
500,190,258,7
501,190,179,3
502,190,174,10
503,190,270,1
504,191,279,6
505,191,287,5
506,192,116,8
507,192,77,4
508,193,255,10
509,193,203,3
510,193,95,10
511,193,115,2
512,193,132,1
513,194,199,1
514,194,267,10
515,195,236,7
516,195,275,2
517,195,282,5
518,195,241,8
519,195,109,1
520,196,195,10
521,197,152,10
522,197,183,2
523,197,6,2
524,197,132,10
525,197,53,8
526,198,188,10
527,198,290,5
528,199,243,4
529,199,192,4
530,200,153,2
531,200,229,1
532,200,44,8
533,200,100,6
534,200,3,9
535,201,110,1
536,201,269,9
537,202,284,1
538,203,103,3
539,204,270,4
540,205,120,5
541,205,294,8
542,206,134,6
543,206,283,9
544,207,270,7
545,207,155,4
546,208,277,9
547,208,93,9
548,208,104,10
549,208,194,7
550,208,225,4
551,209,198,8
552,209,291,10
553,210,242,3
554,210,43,1
555,210,271,1
556,210,179,8
557,210,188,10
558,211,172,8
559,211,82,6
560,211,171,9
561,211,260,10
562,211,229,4
563,212,207,8
564,212,251,5
565,213,204,6
566,213,246,1
567,214,157,10
568,214,236,2
569,215,272,2
570,215,173,1
571,215,167,10
572,215,153,7
573,215,222,6
574,216,215,6
575,216,233,7
576,216,155,8
577,216,99,8
578,216,138,10
579,217,261,5
580,217,265,5
581,218,215,2
582,218,77,3
583,218,148,7
584,218,275,4
585,218,127,10
586,219,294,2
587,219,207,4
588,220,272,5
589,220,232,8
590,220,171,8
591,220,179,8
592,220,114,3
593,221,167,4
594,221,241,3
595,221,70,6
596,221,142,1
597,221,196,5
598,222,159,8
599,222,287,3
600,223,207,6
601,223,44,6
602,223,108,7
603,223,127,8
604,223,234,2
605,224,279,7
606,224,222,9
607,225,293,7
608,225,33,4
609,225,250,6
610,225,79,1
611,225,197,3
612,226,261,4
613,226,209,6
614,226,294,4
615,226,48,2
616,226,295,7
617,227,124,10
618,228,187,3
619,228,27,9
620,229,213,8
621,229,222,3
622,229,22,8
623,229,178,2
624,229,203,3
625,230,143,7
626,231,202,6
627,231,47,4
628,231,127,4
629,231,256,4
630,231,170,5
631,232,279,10
632,232,285,7
633,233,254,10
634,233,56,1
635,233,76,9
636,233,171,10
637,233,219,7
638,234,254,6
639,235,266,5
640,235,87,7
641,235,211,4
642,235,59,5
643,235,92,8
644,236,261,1
645,236,91,8
646,236,226,3
647,236,208,5
648,236,164,1
649,237,278,8
650,237,251,9
651,237,138,2
652,237,183,10
653,237,269,10
654,238,186,7
655,238,199,10
656,238,203,6
657,238,258,10
658,238,89,7
659,239,270,10
660,239,175,6
661,239,56,10
662,239,188,9
663,239,228,2
664,240,160,8
665,240,271,8
666,241,255,5
667,241,54,9
668,241,279,4
669,241,66,5
670,241,186,8
671,242,263,1
672,242,222,6
673,242,47,6
674,242,210,3
675,242,280,3
676,243,269,10
677,243,89,10
678,243,13,2
679,243,227,8
680,243,157,7
681,244,208,1
682,244,62,1
683,245,140,4
684,245,292,3
685,246,292,4
686,246,91,1
687,247,210,3
688,247,293,5
689,247,31,2
690,247,263,6
691,247,174,1
692,248,181,1
693,248,56,3
694,248,227,3
695,248,22,8
696,248,258,4
697,249,127,7
698,249,166,10
699,250,235,7
700,250,132,4
701,251,288,6
702,252,263,9
703,252,58,4
704,252,151,9
705,252,56,8
706,252,144,5
707,253,166,10
708,253,228,7
709,253,76,3
710,253,136,1
711,253,175,4
712,254,281,9
713,254,48,1
714,254,202,4
715,254,100,5
716,254,44,6
717,255,293,6
718,255,282,9
719,255,190,10
720,255,164,1
721,255,253,5
722,256,238,9
723,256,76,4
724,256,259,4
725,256,249,10
726,256,251,10
727,257,142,2
728,257,259,3
729,257,48,4
730,257,78,4
731,257,249,3
732,258,281,3
733,258,227,7
734,259,198,7
735,260,274,9
736,260,127,2
737,261,265,1
738,261,82,5
739,261,171,7
740,261,152,7
741,261,79,3
742,262,238,6
743,263,284,2
744,263,137,3
745,264,248,1
746,264,271,2
747,265,292,2
748,266,294,10
749,266,112,5
750,266,129,3
751,266,216,3
752,266,230,5
753,267,154,4
754,267,26,7
755,268,251,10
756,268,284,5
757,269,281,3
758,269,174,8
759,269,96,2
760,269,97,3
761,269,79,10
762,270,290,7
763,270,132,8
764,271,177,6
765,272,284,10
766,272,42,5
767,272,259,7
768,272,82,4
769,272,21,1
770,273,241,4
771,273,6,3
772,274,284,7
773,274,132,2
774,274,70,1
775,274,215,10
776,274,95,7
777,275,196,7
778,275,207,6
779,275,42,1
780,275,56,7
781,275,204,5
782,276,143,4
783,276,119,3
784,276,93,2
785,276,192,1
786,276,270,10
787,277,281,7
788,277,96,10
789,277,21,2
790,277,208,9
791,277,120,10
792,278,281,3
793,278,227,3
794,279,288,9
795,279,27,7
796,280,284,4
797,280,99,9
798,280,42,7
799,280,136,2
800,280,281,6
801,281,294,7
802,281,192,2
803,282,280,10
804,282,27,10
805,283,288,5
806,283,58,10
807,283,158,4
808,283,290,2
809,283,71,7
810,284,290,7
811,284,298,2
812,285,194,7
813,285,27,9
814,286,237,2
815,286,289,2
816,287,219,4
817,288,289,4
818,288,297,8
819,288,38,7
820,288,179,10
821,288,169,8
822,289,293,4
823,290,293,4
824,291,205,6
825,292,294,9
826,292,234,8
827,292,162,9
828,292,296,6
829,292,199,8
830,293,294,1
831,294,157,3
832,295,274,6
833,295,77,5
834,295,14,5
835,295,68,3
836,295,127,1
837,296,277,8
838,296,273,10
839,297,209,1
840,297,28,7
841,298,158,8
842,298,16,2
843,299,208,6
TOPO1_CSV

cat >./testcase/topo2.csv <<TOPO2_CSV
0,0,1,3
1,0,3,5
2,0,12,10
3,1,45,5
4,1,40,5
5,1,12,6
6,2,0,10
7,2,41,9
8,2,19,4
9,3,4,1
10,3,17,10
11,3,22,8
12,4,32,9
13,4,17,8
14,4,22,4
15,4,38,10
16,4,45,8
17,5,3,7
18,5,7,4
19,6,5,2
20,6,13,6
21,6,12,1
22,6,31,6
23,6,46,1
24,7,10,9
25,7,15,10
26,7,29,5
27,7,11,4
28,7,1,9
29,8,7,1
30,8,49,1
31,8,33,8
32,9,4,7
33,9,17,6
34,9,44,3
35,9,43,7
36,9,39,10
37,10,12,6
38,10,41,10
39,10,29,4
40,10,22,3
41,10,19,8
42,11,8,9
43,11,22,6
44,11,21,4
45,12,20,5
46,12,26,7
47,13,35,2
48,13,43,9
49,14,12,6
50,14,18,1
51,14,46,9
52,15,21,3
53,15,24,6
54,15,14,5
55,15,30,8
56,15,12,6
57,16,9,3
58,16,20,5
59,16,33,9
60,17,41,5
61,17,22,5
62,17,32,4
63,18,22,9
64,18,41,10
65,19,10,8
66,19,38,10
67,19,5,2
68,20,35,8
69,20,29,5
70,20,12,5
71,21,42,8
72,21,24,9
73,21,20,6
74,22,45,10
75,22,44,8
76,22,20,8
77,23,20,3
78,23,34,5
79,23,43,2
80,24,20,10
81,24,48,10
82,24,40,9
83,25,15,6
84,25,32,1
85,25,41,10
86,26,16,2
87,26,33,8
88,26,30,10
89,26,38,7
90,26,48,3
91,27,17,5
92,27,46,5
93,27,19,2
94,28,18,3
95,28,31,5
96,28,35,5
97,29,18,5
98,29,46,1
99,30,25,3
100,30,41,9
101,30,2,10
102,31,39,6
103,31,42,6
104,31,33,4
105,31,45,9
106,31,8,7
107,32,40,5
108,32,38,6
109,32,47,7
110,33,41,5
111,33,49,3
112,34,46,6
113,34,42,5
114,34,12,8
115,35,46,5
116,35,49,1
117,35,21,2
118,35,40,9
119,35,7,4
120,36,23,6
121,36,47,3
122,36,29,2
123,36,0,5
124,36,30,7
125,37,29,10
126,37,39,10
127,37,40,1
128,37,48,6
129,38,43,5
130,38,47,4
131,38,41,2
132,38,29,1
133,38,44,9
134,39,44,7
135,39,48,10
136,39,7,9
137,39,12,1
138,39,41,8
139,40,41,9
140,40,49,3
141,40,1,5
142,41,45,4
143,41,48,5
144,42,44,10
145,42,43,10
146,42,24,6
147,42,21,8
148,42,22,4
149,43,45,4
150,43,48,4
151,43,19,5
152,43,47,10
153,43,34,3
154,44,35,4
155,44,48,2
156,44,33,7
157,45,49,10
158,45,46,3
159,45,24,7
160,46,49,6
161,46,48,10
162,46,29,1
163,47,49,3
164,47,48,8
165,47,27,1
166,48,49,6
167,48,37,6
168,48,36,8
169,48,44,2
170,48,25,2
171,49,31,3
172,49,2,4
173,49,47,3
TOPO2_CSV

cat >./testcase/d1.csv <<D1_CSV
19,87,55|22|33|15|198|123|134|156|255|258|236|77|27|233|85|20|66|222|238|79
D1_CSV

cat >./testcase/d2.csv <<D2_CSV
0,1,4|7|8|14|24|44|33|32|25|48
D2_CSV

parse_result( )
{
	if [ ! -f $1 ] ; then
		echo "${RED}Error${NORM}: result file not found. maybe your program runs timeout (20s)"
		return 1
	fi
	a=`egrep -c "^([0-9]+\|)*[0-9]+$" $1` 
	if [ $a -eq 1 ] ; then
		echo "${GREEN}!! PASS . ${NORM}Although It's not sure that your path is right,but the format is correct." 
		return 0
	else
		echo "${RED}Error${NORM}: the format of your output is invalid. it should like \"123|121|111\", and all in one line."
		echo "    any space and tab is not permitted in result."
	fi
	return 1
}

r=0
for i in 1 2 ;do
	rm -f ./result.txt > /dev/null 2>&1
	echo "-------------------------"
	echo "!! Begin testcase $i ..."
	exec_cmd="${cmdstr} ./testcase/topo${i}.csv ./testcase/d${i}.csv ./result.txt"
	$exec_cmd
	
	if [ $? -eq 0 ] ; then
		parse_result ./result.txt 
		r=`expr $r + $?`
	elif [ $? -eq 124 ] || [ $? -eq 137 ] ; then
		echo "${RED}Error: your program TimeOut, please optimize it.${NORM}"
		r=1
	else
		echo "${RED}Error: code is $?${NORM}"
		r=1
	fi
done

if [ $r -ne 0 ] ; then
	echo "------------------------------------------"
	echo "some errors in your package , please modify and try again."
else
	echo "${GREEN}Congratulations! you can commit your package to huawei.${NORM}"
fi


